package com.wing.robot.model.entity;

import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.enums.IEnum;
import com.wing.mybatis.common.BaseEntity;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * 复合机器人任务详细记录
 *
 * @author
 */
@Data
@NoArgsConstructor
@Accessors(chain = true)
@TableName("robot_task_detail")
public class RobotTaskDetail extends BaseEntity<RobotTaskDetail> implements Serializable {

    private static final long serialVersionUID = 1L;

    public enum Status implements IEnum<Integer> {

        /**
         * 空状态
         */
        None(0,"空状态"),
        /**
         * 订单尚未被分配给小车
         */
        TOBEDISPATCHED(1,"订单尚未被分配给小车"),
        /**
         * 运单已经分配给机器人但是还未被执行
         */
        CREATED(2,"运单已经分配给机器人但是还未被执行"),
        /**
         * 运单正在被机器人执行中
         */
        RUNNING(3,"运单正在被机器人执行中"),
        /**
         * 运单中所有动作块都已经被执行完成了，但是运单没有被封口，等待后续指令
         */
        WAITING(4,"运单中所有动作块都已经被执行完成了，但是运单没有被封口，等待后续指令"),
        /**
         * 运单完成(终态
         */
        FINISHED(5,"运单完成(终态"),
        /**
         * 任务失败
         */
        FAILED(6,"任务失败"),
        /**
         * 运单在非正常状态下完成
         */
        STOPPED(7,"运单在非正常状态下完成");

        private int code;
        private String desc;

        Status(int code,String desc){
            this.code=code;
            this.desc=desc;
        }

        @Override
        public Integer getValue(){
            return this.code;
        }

        public String getDesc(){
            return this.desc;
        }
    }

    /**
     * 创建者
     */
    private Long creator;

    /**
     * 修改者
     */
    private Long modifier;

    /**
     * 创建人
     */
    private String creatorName;

    /**
     * 修改人
     */
    private String modifierName;

    /**
     * 执行任务的agv
     */
    private Long agvId;

    /**
     * 执行任务的机械臂
     */
    private Long armId;

    /**
     * 任务模板
     */
    private Long taskId;

    /**
     * agv起点
     */
    private String agvFrom;

    /**
     * agv目的点
     */
    private String agvTo;

    /**
     * 起点动作点位
     */
    private Long fromPoint;

    /**
     * 目的点动作点位
     */
    private Long toPoint;

    /**
     * 订单状态
     */
    private Status status;

    /**
     * 订单状态描述
     */
    @TableField(exist = false)
    private String statusDesc;

    public String getStatusDesc() {
        return status == null ? null : status.getDesc();
    }
    /**
     *  唯一的任务编号，即下发订单时的id
     */
    private String code;
}
